package metier;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import onglets.classe.Progression_Cours;
import DB.Request;
import bean.ProgressionCours;

public class ProgressionCoursMetier {
	private static ProgressionCoursMetier singleton = new ProgressionCoursMetier();
	
	public static ProgressionCoursMetier getInstance(){
		return singleton;
	}
	
	public ProgressionCours save(ProgressionCours progression_cours){
		if(progression_cours != null){
			String query;
			if (progression_cours.getId_progression() != null) {
				//UPDATE
				query = "UPDATE progression_cours SET id_matiere=?,index_ligne=?,date_progression=?,texte=?,id_classe=? WHERE id_progression="+progression_cours.getId_progression();
			} else {
				//INSERT
				query = "INSERT INTO progression_cours(id_matiere,index_ligne,date_progression,texte,id_classe) VALUES (?,?,?,?,?)";
			}
			List<Object> param = new ArrayList<Object>();
			param.add(progression_cours.getMatiere().getId_matiere());
			param.add(progression_cours.getIndex_ligne());
			param.add(progression_cours.getDate_progression());
			param.add(progression_cours.getTexte());
			param.add(progression_cours.getClasse().getId_classe());
			Request.getInstance().executeUpdate(query, param);
		}
		if (progression_cours.getId_progression() != null) {
			return getById(progression_cours.getId_progression());
		} else {
			return getById(getLastId());
		}
	}
	
	public void delete(ProgressionCours progression_cours){
		String query = "DELETE FROM progression_cours WHERE id_progression=" + progression_cours.getId_progression();
		Request.getInstance().executeUpdate(query);
	}
	
	public ProgressionCours getById(Integer id){
		ProgressionCours progression_cours = null;
		String query = "SELECT * FROM progression_cours WHERE id_progression=" + id;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				progression_cours = new ProgressionCours(id, resultat.getString("index_ligne"), resultat.getDate("date_progression"), resultat.getString("texte"), MatiereMetier.getInstance().getById(resultat.getInt("id_matiere")), ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return progression_cours;
	}

	
	public List<ProgressionCours> getAll(){
		List<ProgressionCours> progression_courss = new ArrayList<ProgressionCours>();
		String query = "SELECT * FROM progression_cours";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				ProgressionCours progression_cours =  new ProgressionCours(resultat.getInt("id_progression"), resultat.getString("index_ligne"), resultat.getDate("date_progression"), resultat.getString("texte"), MatiereMetier.getInstance().getById(resultat.getInt("id_matiere")), ClasseMetier.getInstance().getById(resultat.getInt("id_classe")));
				progression_courss.add(progression_cours);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return progression_courss;
	}

	
	private Integer getLastId(){
		Integer result = null;
		String query = "SELECT max(id_progression) AS id_progression FROM progression_cours";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				result = resultat.getInt("id_progression");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
}
